package com.atguigu.mybatis.mapper;


import com.atguigu.mybatis.pojo.User;
import org.apache.ibatis.annotations.MapKey;

import java.util.List;
import java.util.Map;

public interface SelectMapper {

    /**
     * MyBatis的各种查询功能:
     * 1、若查询出的数据只有一条，
     *   a. 可以通过实体类对象接收
     *   b. 可以通过list集合接收
     *   c. 可以通过map集合接收
     * 2、若查询出的数据有多条，
     *   a. 可以通过list的实体类集合接收，
     *   b. 可以通过list的map集合接收
     *   c. 可以在mapper接口的方法上添加@MapKey注解，此时就可以将每条数据转换的map集合作为值，以某个字段作为键，放在同一个map集合中
     * 注意：一定不能通过实体类对象接收，此时会抛异常TooManyResultsException
     */

    /**
     * 查询单个实体类对象
     * @param id
     * @return
     */
    User selectUserById(Integer id);

    /**
     * 查询list集合
     * @return
     */
    List<User> selectUserList();

    /**
     * 查询单个数据
     * @return
     */
    Integer selectCount();

    /**
     * 查询单条数据为map集合
     * MyBatis中设置了默认的类型别名
     * ● java.lang.Integer-->int, integer
     * ● int-->_int,_integer
     * ● Map-->map
     * ● String-->string
     * @param id
     * @return
     */
    Map<String,Object> selectUserMapById(Integer id);

    /**
     * 查询多条数据为list的map集合
     * @return
     */
    List<Map<String,Object>> selectUserMap();

    /**
     * 查询多条数据为map集合
     * @return
     */
    @MapKey("id")
    Map<String,Object> selectAllUserMap();



}
